"""
Case Type   : cm_ctl
Case Name   : 执行cm_ctl pause前手动创建暂停标识文件
Create At   : 2023/04/10
Owner       : opentestcase012
Description :
    1.所有节点手动创建暂停标识文件;
    2.查看集群状态;
    3.执行cm_ctl pause;
    4.查看集群状态;
    5.查看暂停标识文件;
Expect      :
    1.创建成功
    2.集群状态正常,有暂停标识yes
    3.执行成功
    4.集群状态正常,有暂停标识yes
    5.暂停标识文件存在
History     :
"""
import os
import time
import unittest

from testcase.utils.Common import Common
from testcase.utils.CommonSH import CommonSH
from testcase.utils.Constant import Constant
from testcase.utils.Logger import Logger
from yat.test import Node
from yat.test import macro

primary_sh = CommonSH('PrimaryDbUser')


# @unittest.skipIf(2 != primary_sh.get_node_num(), '非1+2环境不执行')
class DefinedResource(unittest.TestCase):
    def setUp(self):
        self.log = Logger()
        self.log.info(f'----{os.path.basename(__file__)} start----')
        self.common = Common()
        self.constant = Constant()
        self.pri_user = Node('PrimaryDbUser')
        self.pri_root = Node('PrimaryRoot')
        self.primary_sh = CommonSH('PrimaryDbUser')
        self.pause_file = os.path.join(macro.GAUSSHOME_BIN_PATH,
                                       'cluster_manual_pause')

    def test_cm(self):
        text = '----step1:所有节点手动创建暂停标识文件; expect:创建成功----'
        self.log.info(text)
        res = self.primary_sh.exec_gs_ssh(f'touch {self.pause_file}')
        self.assertIn('Successfully execute command on all nodes', res,
                      "执行失败:" + text)

        text = '----step2:查看集群状态; expect:集群状态正常,有暂停标识yes----'
        self.log.info(text)
        cm_ctl_res = self.primary_sh.exec_cm_ctl('query', '-Civ')
        self.assertIn(self.constant.CLUSTER_NORMAL_MSG, cm_ctl_res,
                      '执行失败:' + text)
        self.assertIn('pausing         : Yes', cm_ctl_res, '执行失败:' + text)

        text = '----step3:执行cm_ctl pause; expect:暂停成功----'
        self.log.info(text)
        cm_ctl_res = self.primary_sh.exec_cm_ctl('pause')
        self.assertIn(self.constant.cm_pause_success_msg, cm_ctl_res,
                      '执行失败:' + text)

        time.sleep(10)
        text = '----step4:查看集群状态; expect:集群状态正常,有暂停标识yes----'
        self.log.info(text)
        cm_ctl_res = self.primary_sh.exec_cm_ctl('query', '-Civ')
        self.assertIn(self.constant.CLUSTER_NORMAL_MSG, cm_ctl_res,
                      '执行失败:' + text)
        self.assertIn('pausing         : Yes', cm_ctl_res, '执行失败:' + text)

        text = '----step5:查看暂停标识文件; expect:暂停标识文件存在----'
        self.log.info(text)
        res = self.primary_sh.exec_gs_ssh(f'ls {self.pause_file};')
        self.assertEqual(3, res.count(self.pause_file), "执行失败:" + text)

    def tearDown(self):
        self.log.info('-----清理环境-----')
        text = '----恢复集群状态; expect:执行成功----'
        self.log.info(text)
        cm_ctl_res1 = self.primary_sh.exec_cm_ctl('resume')
        cm_ctl_res2 = self.primary_sh.exec_cm_ctl('start')
        cm_ctl_res3 = self.primary_sh.exec_cm_ctl('switchover', '-a')
        time.sleep(10)
        cm_ctl_res4 = self.primary_sh.exec_cm_ctl('query', '-Civ')
        self.assertIn(self.constant.cm_resume_success_msg, cm_ctl_res1,
                      '执行失败:' + text)
        self.assertIn(self.constant.cm_start_success_msg, cm_ctl_res2,
                      '执行失败:' + text)
        self.assertIn(self.constant.cm_switchover_success_msg, cm_ctl_res3,
                      '执行失败:' + text)
        self.assertIn(self.constant.CLUSTER_NORMAL_MSG, cm_ctl_res4,
                      "执行失败:" + text)
        self.log.info(f'----{os.path.basename(__file__)} finish----')
